package com.hyper_yang._03_designpatterns.principles.demo7.after;

/**
 * 合成复用原则 【优先组合、其次继承】
 * 采用组合和聚合复用时，可以将已有对象纳入新对象中，成为成员对象，新对象调用成员对象功能:
 * 1、维持了类的封装性。因为成员对象的内部细节是对象本身看不到的 【黑箱复用】
 * 2、对象间的耦合度低，可以在类的成员位置声明抽象
 * 3、复用的灵活性高，这种复用可以在运行时动态进行，新对象可以动态的引用与成分对象类型相同的对象
 */
public class Test {
    public static void main(String[] args) {
        Car car1 = new Car(new ElectricEnergy(), new RedColor());
        car1.drive();
        Car car2 = new Car(new ElectricEnergy(), new WhiteColor());
        car2.drive();
        Car car3 = new Car(new GasEnergy(), new RedColor());
        car3.drive();
        Car car4 = new Car(new GasEnergy(), new WhiteColor());
        car4.drive();
    }
}
